/**
 * 虚拟列表项的位置缓存
 * 用于存储每个列表项的计算高度和在列表中的位置
 */
export interface VirtualListItemPosition {
  /** 列表项的索引 */
  index: number;

  /* * 列表项的真实高度.
   * 初始值为 preEstimatedHeight, 渲染后更新为真实高度.
   */
  height: number;

  /** 列表项顶部相对于列表顶部的距离 (top) */
  top: number;

  /** * 列表项底部相对于列表顶部的距离 (bottom)
   * (值为 top + height)
   */
  bottom: number;
}

export type DataItem = Record<string, any>;

export interface ScrollToOptions {
  /** 滚动偏移量，正数向下，负数向上 */
  offset?: number;
  /** 滚动行为 */
  behavior?: "auto" | "smooth";
}

export interface ScrollToNewItemOptions extends ScrollToOptions {
  /** 是否高亮显示 */
  highlight?: boolean;
}

export interface DynamicVirtualListProps {
  /** 所有列表数据 */
  data: DataItem[];

  /** 预估高度 */
  estimatedHeight: number;

  /** 缓冲区大小 */
  buffer?: number;

  /** (可选) 为 data 中的每一项提供一个唯一的 key */
  itemKey?: string;

  /** 数据变化时是否重置滚动位置，默认为 false（保持滚动位置） */
  resetScrollOnDataChange?: boolean;

  /** 当前高亮的项 key */
  highlightedItemKey?: string | number;

  /** 项可见性变化回调 */
  onItemVisible?: (item: DataItem, index: number, isVisible: boolean) => void;

  /** 滚动到底部回调 */
  onScrollToBottom?: () => void;

  /** 滚动到顶部回调 */
  onScrollToTop?: () => void;

  /** 滚动事件回调 */
  onScroll?: (
    scrollTop: number,
    scrollHeight: number,
    clientHeight: number
  ) => void;
}
